<?php
use Doctrine\Common\Collections\ArrayCollection;

class Negocio_CreditosController extends Zend_Controller_Action {

    public function init() {
        $this->_helper->_layout->setLayout('layout_negocios');
        
        $this->_permisoDao = new Doctrine_Model_PermisoDao();
        
        $auth = Zend_Auth::getInstance();
        if ($auth->hasIdentity()) {
            if (!empty($auth->getIdentity()->id)) {
                $usuarioDao = new Doctrine_Model_UsuariosDoctrineDao();
                $this->view->usuario = $usuarioDao->obtenerPorId($auth->getIdentity()->id);
            }
        } else {
            $this->_helper->redirector('index', 'login', 'admin');
        }
        
        /* Colores */
        $colores = array(
            '5b92d6' => array('5b92d6', '8fbaef'), //azul
            'd6d65b' => array('d6d65b', 'bfbf3f'), //amarillo
            '51ad56' => array('51ad56', '73be78'), //verde
            'db6f70' => array('db6f70', 'e59899'), //rojo
            '5e71a0' => array('5e71a0', '8e9cbc'), //azul oscuro
            'd68e5b' => array('d68e5b', 'e8a97c'), //naranja
            '92989f' => array('92989f', 'bbbec3')); //gris
        $this->view->colorSucursal = $colores[$this->view->usuario->getSucursal()->getColor()];
        /* Colores */
                
        $this->_codigoDao = new Doctrine_Model_CodigoDao();
        $this->referenciaDao = new Doctrine_Model_Referencias();
        $this->informeDao = new Doctrine_Model_InformeDoctrineDao();
        $this->view->headScript()->appendFile($this->view->baseUrl() . '/js/jquery.maskedinput-1.3.min.js');
        $this->view->headScript()->appendFile($this->view->baseUrl() . '/js/cliente_registrar.js');
        $this->view->headScript()->appendFile($this->view->baseUrl() . '/js/credito_registrar.js');

        $this->_personaDao = new Doctrine_Model_PersonaDao();
        $this->_creditoDao = new Doctrine_Model_CreditoDao();
        $this->_tasaDao = new Doctrine_Model_TasaDao();
        $this->_movimientoDao = new Doctrine_Model_MovimientoDao();
        $this->_pagoDao = new Doctrine_Model_PagosDao();
        $this->_referenciaDao = new Doctrine_Model_Referencias();
    }

    public function indexAction() {
        
    }
    
    public function registrarAction(){
        $this->view->titulo = "Simulador de Credito";
        $session = new Zend_Session_Namespace("session");
        $noContinua = false;
        
        $this->view->tiposDeCreditosDisponibles = new ArrayCollection();
        $this->view->tiposInformes = new ArrayCollection();
        
        $cliente_id = $this->getRequest()->getParam("cliente_id", null);
        $credito_a_renovar_id = $this->getRequest()->getParam("credito_a_renovar_id");
        if ($cliente_id):
            $this->view->titulo = "Registrar Credito";

            $this->view->tiposInformes = $this->referenciaDao->obternerTiposInformesVisibles();
            
            if (empty($cliente_id)) {
                $cliente_id = $session->cliente_id;
                $garante_id = $this->getRequest()->getParam('garante_id');
                if (!empty($garante_id)) {
                    $session->garante_id = $this->getRequest()->getParam('garante_id');
                    $this->view->garante = $this->_personaDao->obtenerPorId($garante_id);
                    $creditosPorParteDelGarante = $this->_creditoDao->obtenerTodosPorPersonaOrdenadoPorEstado($this->view->garante->getId());
                    $this->view->garante_moroso = $this->view->garante->estoyEnMora($creditosPorParteDelGarante);
                }
            }
            
            $garante_id = $this->getRequest()->getParam('garante_id');
            if (!empty($garante_id)) {
                $session->garante_id = $this->getRequest()->getParam('garante_id');
                $this->view->garante = $this->_personaDao->obtenerPorId($garante_id);
                $creditosPorParteDelGarante = $this->_creditoDao->obtenerTodosPorPersonaOrdenadoPorEstado($this->view->garante->getId());
                $this->view->garante_moroso = $this->view->garante->estoyEnMora($creditosPorParteDelGarante);
            }

            $this->view->cliente = $this->_personaDao->obtenerPorId($cliente_id);
            $this->view->tiposDeCreditosDisponibles = $this->view->cliente->obtenerTiposDeCreditosParaSolicitar();
            $creditosPorParteDelCliente = $this->_creditoDao->obtenerTodosPorPersonaOrdenadoPorEstado($this->view->cliente->getId());
            $this->view->cliente_moroso = $this->view->cliente->estoyEnMora($creditosPorParteDelCliente);

            $session->cliente_id = $cliente_id;
        endif;
        
        if (count($this->view->tiposDeCreditosDisponibles) == 0):
            $noContinua = true;
        endif;
        
        if ($this->view->cliente):
            $creditoARenovar = $this->_creditoDao->obtenerPorId($credito_a_renovar_id);

            if ($creditoARenovar) {
                $montoCreditoARenovar = $creditoARenovar->obtenerMontoAdeudado();

                $this->view->monto_credito_anterior = $montoCreditoARenovar;
                $this->view->credito_anterior_id = $credito_a_renovar_id;
                $this->view->cantidad_cuotas_pendientes = count($creditoARenovar->obtenerCuotasImpagas());
                $numerosDeCuotasPendientesArray = array();
                foreach ($creditoARenovar->obtenerCuotasImpagas() as $cuotai) {

                    $numerosDeCuotasPendientesArray[] = $cuotai->getNumeroDeCuota();
                }
                if ($creditoARenovar->obtenerCuotasImpagas()->last()) {
                    $this->view->monto_x_cuota_adeudada = $creditoARenovar->obtenerCuotasImpagas()->last()->getMontoOriginal();
                }

                $this->view->numeros_de_cuotas_adedudads = implode(',', $numerosDeCuotasPendientesArray);
                $this->view->tiposDeCreditosDisponibles = new ArrayCollection();
                $this->view->tiposDeCreditosDisponibles->add(new Doctrine_Model_Entities_Renovado());
            }
        endif;
        
        $this->view->noContinua = $noContinua;
        $this->view->formulas = $this->referenciaDao->obtenerFormulas();
        $this->view->tipos_creditos = $this->referenciaDao->obtenerTiposDeCreditos();
        
        if ($this->getRequest()->isPost()) {
            $session = new Zend_Session_Namespace("acceso");

            $cliente_id = $this->getRequest()->getParam("cliente_id");
            $garante_id = $this->getRequest()->getParam("garante_id");
            $tasa_id = $this->getRequest()->getParam("tasa_id");
            $formula_id = $this->getRequest()->getParam("formula_id");
            $nro_cuotas = $this->getRequest()->getParam("cuotas");
            $monto = $this->getRequest()->getParam("monto");
            $montoDefinitivo = $this->getRequest()->getParam("monto_definitivo");
            $montoCuota = $this->getRequest()->getParam("monto_x_cuota");
            $montoPrimeraCuota = $this->getRequest()->getParam("monto_usuario");
            $vencimiento = $this->getRequest()->getParam("vencimiento_primera_cuota");
            $primerVencimiento = $this->getRequest()->getParam("vencimiento_usuario");
            $publicidad_id = $this->getRequest()->getParam("publicidad_id");
            $importeAdeudado = $this->getRequest()->getParam("importe_adeudado_hidden");
            
            if (empty($primerVencimiento)) {         
                $formula = $this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Formula', $formula_id);
                $hoy = new \DateTime();
                $fechaPrimerVencimiento=$hoy->modify('+1 month');
                $f = $formula->obtenerFechaPrimieraCuota($fechaPrimerVencimiento);
                $primerVencimiento = $f->format('d/m/Y');
            }
            $tipo = $this->getRequest()->getParam("tipo");
            $datos = $this->getRequest()->getParams();
            if (!empty($cliente_id) && !empty($tasa_id) && !empty($nro_cuotas) && !empty($monto)) {
                $unCredito = new Doctrine_Model_Entities_Credito();
                //obtengo el ultimo numero de credito
                $sucursal = Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_Sucursal', $this->view->usuario->getSucursal()->getId());
                if ($sucursal) {
                    $ultimoNumeroDeCredito = $sucursal->obtenerUltimoNumeroDeCredito();
                    Doctrine_Model_Referencias::guardar($sucursal);
                }
                //fin de obtengo el ultimo numero de credito

                $monto = $montoDefinitivo;

                /* usuario */
                $unCredito->setUsuario($this->view->usuario);
                /* cliente */
                $unCliente = $this->_personaDao->obtenerPorId($cliente_id);
                $unCredito->setCliente($unCliente);

                $unCredito->setNumero($ultimoNumeroDeCredito);

                /***** CODIGO DE SEGURIDAD **** */
                $creditosPorParteDelCliente = $this->_creditoDao->obtenerTodosPorPersonaOrdenadoPorEstado($unCliente->getId());

                $mora = false;
                $advertencia = false;
                if ((!$this->view->usuario->tengoAcceso())) {
                    if ($unCliente->estoyEnMora($creditosPorParteDelCliente)) {
                        $mora = true;
                    }
                    if ($unGarante) {
                        $creditosPorParteDelGarante = $this->_creditoDao->obtenerTodosPorPersonaOrdenadoPorEstado($unGarante->getId());
                        if ($unGarante->estoyEnMora($creditosPorParteDelGarante)) {
                            $mora = true;
                        }
                    }
                    /* advertencia */
                    if ($unCliente->getMora()) {
                        $advertencia = true;
                    }
                }

                //Codigo seguridad
                $usuario = new Doctrine_Model_Entities_Usuario();
                $usuario = $this->view->usuario;

                if (!$usuario->tengoAcceso() && $mora || !$usuario->tengoAcceso() && $advertencia) {
                    $sessionCodSeguridad = new Zend_Session_Namespace("codigo_seguridad");
                    if ($sessionCodSeguridad->codigo) {
                        $this->_codigoDao = new Doctrine_Model_CodigoDao();
                        $unCodigo = new Doctrine_Model_Entities_Codigo();
                        $unCodigo = $this->_codigoDao->obtenerPorCodigo($sessionCodSeguridad->codigo);
                        if ($unCodigo) {
                            if ($unCodigo->getActivo() == 2) {
                                $unCodigo->setActivo(0);
                                $unCodigo->setFechaUso(new DateTime());
                                $this->_codigoDao->guardar($unCodigo);
                                $sessionCodSeguridad->unsetAll();
                            }
                        }
                    } else {
                        $sessionCodSeguridad->isPost = $this->getRequest()->isPost();
                        $sessionCodSeguridad->accion = $this->getRequest()->getActionName();
                        $sessionCodSeguridad->controlador = $this->getRequest()->getControllerName();
                        $sessionCodSeguridad->modulo = $this->getRequest()->getModuleName();
                        $sessionCodSeguridad->params = $this->getRequest()->getParams();
                        $this->_helper->redirector->goToSimple("codigoseguridad", "codigo", "admin");
                    }
                }
                /** *** END CODIGO DE SEGURIDAD **** */

                //$publicidad = $this->referenciaDao->obtenerPorId("Doctrine_Model_Entities_Publicidad", $publicidad_id);
                //$unCredito->setPublicidad($publicidad);
                //$unCredito->getCliente()->setPublicidad($publicidad);
                /* nro_cuotas */
                $unCredito->setNroCuotas($nro_cuotas);
                /* tasa */
                $unaTasa = $this->_tasaDao->obtenerPorId($tasa_id);
                $unCredito->setTasa($unaTasa);
                /* monto */
                $unCredito->setMonto($monto);
                /* vencimiento */

                $vencimientoArray = explode('/', $vencimiento);
                $vencimiento = $vencimientoArray[2] . '-' . $vencimientoArray[1] . '-' . $vencimientoArray[0];

                $unCredito->setVencimiento(new \DateTime($vencimiento));
                /* estado credito */

                $unCredito->setEstado(Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_EstadoCredito', 1));
                switch ($tipo) {
                    case 'Doctrine_Model_Entities_Nuevo':
                        $tipoCredito = Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_Nuevo', 1);
                        $tipo_id = 1;
                        break;
                    case 'Doctrine_Model_Entities_Renovado':
                        $tipoCredito = Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_Renovado', 2);
                        $tipo_id = 2;
                        break;
                    case 'Doctrine_Model_Entities_Paralelo':
                        $tipoCredito = Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_Paralelo', 3);
                        $tipo_id = 3;
                        break;
                    case 'Doctrine_Model_Entities_Reingreso':
                        $tipoCredito = Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_Reingreso', 4);
                        $tipo_id = 4;
                        break;
                    case 'Doctrine_Model_Entities_Exclusivo':
                        $tipoCredito = Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_Exclusivo', 6);
                        $tipo_id = 6;
                        break;
                    default:
                        break;
                }

                if ($creditoARenovar) {
                    $creditoAnterior = $creditoARenovar;

                    if ($creditoAnterior->getEstado()->getId() == 1) {
                        $creditoAnterior->setEstado(Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_EstadoCredito', 3));
                        $creditoAnterior->setFechaCancelado(new DateTime());
                        $CuotasSaldadasArray = $creditoAnterior->saldarCuoatasPorRenovacion();
                        $this->_creditoDao->guardar($creditoAnterior);
                        foreach ($CuotasSaldadasArray as $cuotaSaldadaArray) {
                            $movimiento = new Doctrine_Model_Entities_Entrada();
                            $apellidoYNombres = $creditoAnterior->getCliente()->getApellido() . ', ' . $creditoAnterior->getCliente()->getNombres();
                            $apellidoYNombres = substr($apellidoYNombres, 0, 22);
                            $movimiento->setCategoria($this->_referenciaDao->obtenerPorId('Doctrine_Model_Entities_CategoriaMovimiento', 1));
                            $movimiento->setDescripcion(" " . $apellidoYNombres . " CRE N&#176;:" . $creditoAnterior->getNumero() . " (" . $cuotaSaldadaArray['nroCuota'] . ")");
                            $movimiento->setMonto($cuotaSaldadaArray['monto']);
                            $movimiento->setUsuario($this->view->usuario);
                            $this->_movimientoDao->guardar($movimiento);
                        }
                    }
                }
                $unCredito->setTipo($tipoCredito);

                /* estado cuota */
                $estadoCuotaDao = new Doctrine_Model_EstadoCuotaDao();
                $unEstadoCuota = $estadoCuotaDao->obtenerPorId(1);

                $primerVencimiento = explode("/", $primerVencimiento);
                $vencimientoCuota = new \DateTime("{$primerVencimiento[2]}-{$primerVencimiento[1]}-{$primerVencimiento[0]}");

                for ($i = 1; $i <= $nro_cuotas; $i++) {
                    $unaCuota = new Doctrine_Model_Entities_Cuota();
                    $unaCuota->setCredito($unCredito);
                    $unaCuota->setNumeroDeCuota($i);

                    $unaCuota->setMonto($montoCuota);
                    $unaCuota->setMontoOriginal($montoCuota);
                    $unaCuota->setPunitorio(0.0045);
                    $unaCuota->setEstado($unEstadoCuota);

                    /* vencimiento de cuota */
                    $unaCuota->setVencimiento(new DateTime($vencimientoCuota->format('Y-m-d')));
                    $unaCuota->setVencimientoOriginal(new DateTime($vencimientoCuota->format('Y-m-d')));
                    $vencimientoCuota->modify('+1 month');

                    /* agregar cuota */
                    $unCredito->agregarCuotas($unaCuota);
                }

                if ($this->_creditoDao->guardar($unCredito)) {
                    Zend_Session::namespaceUnset('session');

                    if ($tipo == 1 || $tipo == 3 || $tipo == 4) {
                        $movimiento = new Doctrine_Model_Entities_Salida();
                        $apellidoYNombres = $unCredito->getCliente()->getApellido() . ', ' . $unCredito->getCliente()->getNombres();
                        $apellidoYNombres = substr($apellidoYNombres, 0, 22);
                        $movimiento->setDescripcion(" " . $unCredito->getTipo()->getDescripcion() . '(N&#176; ' . $unCredito->getNumero() . ') - ' . $apellidoYNombres);
                        $movimiento->setMonto($unCredito->getMonto());
                        $movimiento->setCategoria(Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_CategoriaMovimiento', 2));
                        $movimiento->setUsuario($this->view->usuario);
                        $this->_movimientoDao->guardar($movimiento);
                    } else {
                        $apellidoYNombres = $unCredito->getCliente()->getApellido() . ', ' . $unCredito->getCliente()->getNombres();
                        $apellidoYNombres = substr($apellidoYNombres, 0, 22);
                        $movimiento = new Doctrine_Model_Entities_Salida();
                        $movimiento->setDescripcion(" " . $unCredito->getTipo()->getDescripcionCorta() . '(N&#176; ' . $unCredito->getNumero() . ') - ' . $apellidoYNombres);
                        $movimiento->setMonto($unCredito->getMonto());
                        $movimiento->setCategoria(Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_CategoriaMovimiento', 2));
                        $movimiento->setUsuario($this->view->usuario);
                        $this->_movimientoDao->guardar($movimiento);
                    }

                    $parametros = array('credito_id' => $unCredito->getId());
                    $this->_helper->redirector('imprimir', 'creditos', 'negocio', $parametros); //al detalle
                } else {
                    $this->_flashMessenger->addMessage(array("error" => "Error al intentar registrar el credito."));
                    $this->_helper->redirector('registrar', 'creditos', 'negocio');
                }
            } else {
                $this->view->error = true;
                $this->view->mensaje = "Problemas al intentar registrar el credito, verifique los datos ingresados";
            }
        }
        
    }

    public function borrarAction() {

        $this->_helper->viewRenderer->setNoRender();
        $this->_helper->getHelper('layout')->disableLayout();
        $credito_id = $this->getRequest()->getParam("credito_id");

        if (!empty($credito_id)) {

            //Codigo seguridad
            $usuario = new Doctrine_Model_Entities_Usuario();
            $usuario = $this->view->usuario;

            $fecha_actual = new DateTime();
            $credito = new Doctrine_Model_Entities_Credito();
            $credito = $this->_creditoDao->obtenerPorId($credito_id);
            $numeroDeCredito = $credito->getNumero();
            //if ($credito->getFecha()->format("d/m/Y") != $fecha_actual->format("d/m/Y")) {
            if (!$usuario->tengoAcceso()) {
                $sessionCodSeguridad = new Zend_Session_Namespace("codigo_seguridad");
                if ($sessionCodSeguridad->codigo) {
                    $this->_codigoDao = new Doctrine_Model_CodigoDao();
                    $unCodigo = new Doctrine_Model_Entities_Codigo();
                    $unCodigo = $this->_codigoDao->obtenerPorCodigo($sessionCodSeguridad->codigo);
                    if ($unCodigo) {
                        if ($unCodigo->getActivo() == 2) {
                            $unCodigo->setActivo(0);
                            $unCodigo->setFechaUso(new DateTime());
                            $this->_codigoDao->guardar($unCodigo);
                            $sessionCodSeguridad->unsetAll();
                        }
                    }
                } else {
                    $sessionCodSeguridad->isPost = $this->getRequest()->isPost();
                    $sessionCodSeguridad->accion = $this->getRequest()->getActionName();
                    $sessionCodSeguridad->controlador = $this->getRequest()->getControllerName();
                    $sessionCodSeguridad->modulo = $this->getRequest()->getModuleName();
                    $sessionCodSeguridad->params = $this->getRequest()->getParams();
                    $this->_helper->redirector->goToSimple("codigoseguridad", "codigo", "admin");
                }
            }
            //}
            //Codigo seguridad

            $credito = $this->_creditoDao->obtenerPorId($credito_id);
            $cliente = $credito->getCliente();
            if ($this->_creditoDao->eliminar($credito)) {
                $unCredito = $credito;
                $apellidoYNombres = $unCredito->getCliente()->getApellido() . ', ' . $unCredito->getCliente()->getNombres();
                $apellidoYNombres = substr($apellidoYNombres, 0, 22);
                $movimiento = new Doctrine_Model_Entities_Entrada();
                $movimiento->setDescripcion(" " . $unCredito->getTipo()->getDescripcionCorta() . '(Nº ' . $numeroDeCredito . ') - ' . $apellidoYNombres);
                $movimiento->setMonto($unCredito->getMonto());
                $movimiento->setCategoria(Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_CategoriaMovimiento', 2));
                $movimiento->setUsuario($this->view->usuario);
                $this->_movimientoDao->guardar($movimiento);
            }
        }

        $this->_helper->redirector("listado", "creditos", "negocio", array("cliente_id" => $cliente->getId()));
    }
    
    public function listadoAction() {
        
        $persona_id = $this->getRequest()->getParam("cliente_id", null);
        
        $cliente = $this->_personaDao->obtenerPorId($persona_id);
        
        if (!$cliente):
            $params = array("tipo_error" => "error", 'mensaje' => "El cliente no existe o no tiene permisos.");
            $this->_helper->redirector('index', 'creditos', 'negocio', $params);
        endif;
        
        $creditos = $cliente->getCreditos();
        
        $creditosActivosDelUsuario = array();
        $creditosCanceladosDelUsuario = array();
        
        $credito = new Doctrine_Model_Entities_Credito();
        foreach ($creditos as $credito):
            if ($credito->getUsuario()->getSucursal()->getId() == $this->view->usuario->getSucursal()->getId()):
                if($credito->getEstado()->getId() == 1):
                    $creditosActivosDelUsuario[] = $credito;
                else:
                    $creditosCanceladosDelUsuario[] = $credito;
                endif;
            endif;
        endforeach;
        
        $this->view->cliente = $cliente;
        $this->view->creditos = array_merge($creditosActivosDelUsuario, $creditosCanceladosDelUsuario);
        
    }
    
    public function obtenercreditoAction() {

        $this->view->apto_renovar = false;

        //parametros provenientes de anular pagos
        $this->view->error = $this->getRequest()->getParam('error');
        $this->view->mensaje = $this->getRequest()->getParam('mensaje');

        //  $this->_helper->layout()->setLayout("layout_pagos");
        $this->view->headScript()->appendFile($this->view->baseUrl() . '/js/tooltips/jquery.poshytip.js');
        $this->view->headLink()->appendStylesheet($this->view->baseUrl() . '/js/tooltips/tip-yellowsimple/tip-yellowsimple.css');

        if ($this->_hasParam("credito_id")) {
            $id = $this->getRequest()->getParam("credito_id");

            $credito = new Doctrine_Model_Entities_Credito();
            $credito = $this->_creditoDao->obtenerPorId($id);
            $cliente = $credito->getCliente();
            if ($cliente) {
                $cliente_id = $cliente->getId();
                if ($credito->estasAptoARenovar()) {
                    $this->view->apto_renovar = true;
                }
                $this->view->cliente_id = $cliente_id;
            }

            $cuotas = $credito->getCuotas();

            $this->view->cuotas = $cuotas;
            $this->view->credito_id = $id;

            if ($credito->getGarante()) {
                $this->view->garante_id = $credito->getGarante()->getId();
                $this->view->garante_en_mora = $credito->getGarante()->estoyEnMora();
            }

            if ($cliente && empty($this->view->garante_en_mora)) {
                $garantesAsociados = $cliente->obtenerTodosLosGarantesAsociados();
                foreach ($garantesAsociados as $garanteAsociado) {
                    $garanteEnMora = $garanteAsociado->estoyEnMora();
                    if ($garanteEnMora) {
                        $this->view->garante_id = $garanteAsociado->getId();
                        $this->view->garante_en_mora = $garanteAsociado->estoyEnMora();
                    }
                }
            }

            $this->view->cliente_id = $cliente_id;
            $this->view->saldo_total = $credito->getSaldo();
            $this->view->unCliente = $cliente;
            $this->view->credito_facturado = $credito->getFacturado();
        }

        if ($this->_hasParam("cobrar")) {
            var_dump($this->getRequest()->getParams());
        }
    }
    
    public function cobrarAction() {

        $datos = $this->getRequest()->getParams();
        $montoApagar = $datos['monto_a_pagar'];
        $numerosDeCuotas = array();
        $pagoAcuenta = false;
        $pagosRealizadosIds = Array();
        $conjCuotasPagas = Array();
        $cuotasACuenta = Array();
        $pagosRealizados = new ArrayCollection();
        if (isset($datos['credito_id']) && !empty($datos['credito_id'])) {
            $credito = $this->_creditoDao->obtenerPorId($datos['credito_id']);
        }

        if (!empty($montoApagar) && $montoApagar > 0) {
            if ($this->getRequest()->isPost()) {


                $cuotasPagas = array(); //para los movimientos individuales
                //arreglo para cuando el sistema se vueleve loco y hace pagos dobles!
                $idsCuotasParaPagar = $datos['cuotas'];
                $idsSinIntereses = $datos['sin_intereses'];
                $idsCuotasParaPagar = array_unique($idsCuotasParaPagar);
                $idsCuotasSinIntereses = array_unique($idsSinIntereses);
                $j = 0;
                foreach ($idsCuotasParaPagar as $idCuota) {
                    $cuota = $credito->obtenerCuotaPorId($idCuota);

                    //agregado para el plan variable
                    $saldo = $cuota->getSaldo();
                    if ($cuota->getCredito()->planVariable()) {
                        $hoy = new DateTime();
                        $fechaDeControlDeMora = new DateTime($cuota->getVencimiento()->format("Y-m-d"));
                        if ($hoy->format('d') < 11 && $fechaDeControlDeMora->format('m') == $hoy->format('m') && !$cuota->estoySaldada()) {
                            $saldo = $cuota->getMontoOriginal();
                        }
                    }


                    $pago = new Doctrine_Model_Entities_Pago();

                    if (in_array($idCuota, $idsSinIntereses)) {
                        $noCobraIntereses = true;
                        $interesesADescontar = $cuota->getIntereses();
                    } else {
                        $noCobraIntereses = false;
                    }
                    $montoCuota = $this->getRequest()->getParam('monto' . $idCuota, 0);
                    $pago->setCuota($cuota);
                    $pago->setMonto($montoCuota);
                    if ($noCobraIntereses) {
                        // $pago->setMonto($montoCuota - $cuota->getIntereses());
                        $pago->setMonto($montoCuota);
                        $pago->setGeneraMovimientoIntereses(1);
                        $pago->setInteresesCobrados(0);
                        $pago->setInteresesNoCobrados($cuota->getIntereses());
                    } else {
                        $pago->setMonto($montoCuota);


//                        Esta es una logica que hice en su moento para los pagos a cuenta con y sin intereses y se vayan sumando 
//                        anda bien pero ahora no lo entiendo ahora..

                        if ($cuota->getIntereses() > 0 || $cuota->getInteresesNoCobradosEnLaUltimaCuota() > 0) {
                            $a = $cuota->getIntereses();
                            if ($montoCuota >= $cuota->getIntereses() && $cuota->getIntereses() > 0) {
                                $pago->setInteresesCobrados($cuota->getIntereses());

                                $pago->setInteresesNoCobrados(0);
                            } else {
                                if ($cuota->getInteresesNoCobradosEnLaUltimaCuota() > 0) {
                                    if ($montoCuota == $saldo) {
                                        $pago->setInteresesCobrados($cuota->getInteresesNoCobradosEnLaUltimaCuota());
                                        $pago->setInteresesNoCobrados(0);
                                    } else {
                                        $pago->setInteresesCobrados($montoCuota);
                                        $pago->setInteresesNoCobrados(abs(($cuota->getIntereses() + $cuota->getInteresesNoCobradosEnLaUltimaCuota()) - $montoCuota));
                                    }
                                } else {
                                    $pago->setInteresesCobrados($montoCuota);
                                    $pago->setInteresesNoCobrados(abs($cuota->getIntereses() - $montoCuota));
                                }
                            }
                        } else {
                            $pago->setInteresesCobrados(0);
                            $pago->setInteresesNoCobrados(0);
                        }
                    }

                    $pago->setDiasDeMora($cuota->getMora());

                    $pago->setFecha(new DateTime());
                    $pago->setUsuario($this->view->usuario);
                    $pago->setFechaVencimientoCuota($cuota->getVencimiento());

                    $cuota->setMonto($saldo - ($montoCuota));


                    $hoy = new DateTime();

                    $cuota->setVencimiento(new DateTime());
                    $cuota->agregarPago($pago);
                    $numerosDeCuotas[] = $cuota->getNumeroDeCuota();
                    $pagosRealizados->add($pago);
                    if ($cuota->getMonto() > 0) {
                        $pagoAcuenta = true;
                        $cuotasACuenta[] = $cuota->getId();
                    }
                    $cuotasPagas[$j] = array('nro_cuota' => $cuota->getNumeroDeCuota(), 'monto' => $pago->getMonto(), 'pago_a_cuenta' => $pagoAcuenta);
                    $conjCuotasPagas[] = $cuota;
                    $j++;
                }
                if (count($credito->obtenerCuotasImpagas()) == 0) {
                    $EstadoSaldado = Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_EstadoCredito', 2);
                    $credito->setEstado($EstadoSaldado);
                    $credito->setFechaCancelado(new DateTime());
                }
                if ($this->_creditoDao->guardar($credito)) {

                    foreach ($cuotasPagas as $key => $cuotaPaga) {
                        $movimiento = new Doctrine_Model_Entities_Entrada();
                        $apellidoYNombres = $credito->getCliente()->getApellido() . ', ' . $credito->getCliente()->getNombres();
                        $apellidoYNombres = substr($apellidoYNombres, 0, 22);
                        $movimiento->setDescripcion(" " . $apellidoYNombres . " CRE N&#176;:" . $credito->getNumero() . " (" . $cuotaPaga['nro_cuota'] . ")");
                        $movimiento->setMonto($cuotaPaga['monto']);
                        if ($cuotaPaga['pago_a_cuenta']) {
                            $movimiento->setCategoria($this->_referenciaDao->obtenerPorId('Doctrine_Model_Entities_CategoriaMovimiento', 6));
                        } else {
                            $movimiento->setCategoria($this->_referenciaDao->obtenerPorId('Doctrine_Model_Entities_CategoriaMovimiento', 1));
                        }

                        $movimiento->setUsuario($this->view->usuario);
                        $this->_movimientoDao->guardar($movimiento);

                        if ($noCobraIntereses) {
                            $movimiento = new Doctrine_Model_Entities_Entrada();
                            $movimiento->setCategoria($this->_referenciaDao->obtenerPorId('Doctrine_Model_Entities_CategoriaMovimiento', 1));
                            $movimiento->setDescripcion(" " . $apellidoYNombres . " CRE N&#176;:" . $credito->getNumero() . " (" . $cuotaPaga['nro_cuota'] . ")");
                            $movimiento->setMonto(-$interesesADescontar);
                            $movimiento->setUsuario($this->view->usuario);
                            $this->_movimientoDao->guardar($movimiento);
                        }
                    }
                    ////para ver si puede renovar
                    $tiposDeCreditosPosibles = $credito->getCliente()->obtenerTiposDeCreditosParaSolicitar();
                    foreach ($tiposDeCreditosPosibles as $tipoDeCredito) {
                        if ($tipoDeCredito->soyRenovado()) {
                            $this->view->apto_renovar = true;
                        }
                    }
                    //fin para saber si puede renovar
                    $this->view->error = false;
                    $this->view->mensaje = "Pagos registrados con exito!";
                    $this->view->pagos = $pagosRealizados;
                    $this->view->noCobraIntereses = $noCobraIntereses;
                    $this->view->interesesADescontar = $interesesADescontar;


                    foreach ($pagosRealizados as $p) {
                        $pagosRealizadosIds[] = $p->getId();
                    }
                } else {
                    $this->view->error = true;
                    $this->view->mensaje = "Problemas al intentar registrar los pagos";
                }
            }
        } else {
            $this->view->error = true;
            $this->view->mensaje = "Problemas al intentar registrar los pagos";
            $this->_helper->redirector("obtenercredito", "creditos", "negocio", array("credito_id" => $datos['credito_id']));
        }

        $this->view->credito = $credito;
        $this->view->conjCuotasPagas = $conjCuotasPagas;
        $ctas = array();
        foreach ($conjCuotasPagas as $cta) {
            $ctas[] = $cta->getId();
        }
        $this->view->conjCuotasPagas = implode(",", $ctas);

        $this->view->credito_id = $datos['credito_id'];
        $this->view->cuotas_id = implode(",", $idsCuotasParaPagar);
        $this->view->pagos_ids = implode(",", $pagosRealizadosIds);
        $this->view->cuotasACuentaIds = implode(",", $cuotasACuenta);
        ;
        $this->view->cuotas_sin_intereses_ids = implode(",", $idsCuotasSinIntereses);
        if ($credito) {
            $this->view->cliente_id = $credito->getCliente()->getId();
        }
        $this->_helper->redirector("impresioncomprobantes", "creditos", "negocio", array("credito_id" => $datos['credito_id'], "cliente_id" => $this->view->cliente_id, "cuotas_id" => $this->view->cuotas_id, "pagos_ids" => $this->view->pagos_ids, "conjCuotasPagas" => $this->view->conjCuotasPagas, "apto_renovar" => $this->view->apto_renovar, "noCobraIntereses" => $this->view->noCobraIntereses, "interesesADescontar" => $this->view->interesesADescontar, "cuotas_sin_intereses_ids" => $this->view->cuotas_sin_intereses_ids, "cuotas_a_cuenta" => $this->view->cuotasACuentaIds));
    }
    
    public function pagoscuotaAction() {
        $this->_helper->layout->disableLayout();

        //$this->_creditoDao = new Doctrine_Model_CreditoDao();
        $pagos = new Doctrine\Common\Collections\ArrayCollection();
        $id_credito = $this->getRequest()->getParam("id_credito");
        $id_cuota = $this->getRequest()->getParam("id_cuota");
        if ($id_credito && $id_cuota) {
            //$credito = new Doctrine_Model_Entities_Credito();
            $credito = $this->_creditoDao->obtenerPorId($id_credito);
            $cuotas = $credito->getCuotas();
            foreach ($cuotas as $cuota) {
                if ($cuota->getId() == $id_cuota) {
                    $pagos = $cuota->getPagos();
                    continue;
                }
            }
        }
        $pagos_ids = array();
        foreach ($pagos as $pago) {
            $pagos_ids[] = $pago->getId();
        }
        $this->view->id_credito = $id_credito;
        $this->view->id_cuota = $id_cuota;
        $this->view->pagos = $pagos;
        $this->view->pagos_ids = implode(',', $pagos_ids);

        $this->render("pagoscuotatooltip");
    }
    
    public function imprimirpagolpt1Action() {
        $this->_helper->layout->disableLayout();

        $usuario = new Doctrine_Model_Entities_Usuario();
        $usuario = $this->view->usuario;

        $credito_id = $this->getRequest()->getParam("credito_id");
        $cuotas_id = $this->getRequest()->getParam("cuotas_id");

        $pagos_ids = $this->getRequest()->getParam("pagos_ids", 0);
        $cuotas_a_cuentas_ids = $this->getRequest()->getParam("cuotas_a_cuenta", 0);
        $cuotas_id = explode(",", $cuotas_id);
        $pagos_ids = explode(",", $pagos_ids);
        $cuotas_a_cuentas_ids = explode(",", $cuotas_a_cuentas_ids);

        $cuotas_pagas = array();
        $credito = new Doctrine_Model_Entities_Credito();
        $credito = $this->_creditoDao->obtenerPorId($credito_id);

        foreach ($cuotas_id as $id) {
            $cuotas_pagas[] = $credito->obtenerCuotaPorId($id);
        }


        /* Tito */
        $datos = array();

        $datos["sucursal"] = $usuario->getSucursal()->getDescripcion();
        $datos["direccion"] = $usuario->getSucursal()->getDireccion();
        $datos["telefonos"] = $usuario->getSucursal()->getTelefonos();

        $datos["credito_id"] = $credito->getId();
        $datos["nro_credito"] = $credito->getNumero();
        $datos["apellido"] = $credito->getCliente()->getApellido();
        $datos["nombres"] = $credito->getCliente()->getNombres();
        $datos["otorgado"] = $credito->getFecha()->format("d/m/Y");
        $datos["cantidad_cuotas"] = $credito->getNroCuotas();

        $datos["pagos"] = array();

        foreach ($cuotas_pagas as $cuota) {
            $sub_datos = array();

            $val = 0;
            if (!$cuota->estoySaldada())
                $val = 1;

            $pagos = $cuota->getPagos();
            $pago = $pagos->last();

            $sub_datos["pago_parcial"] = "";
            if (!$cuota->estoySaldada()) {
                $sub_datos["pago_parcial"] = 'PAGO PARCIAL';
            }

//             if (in_array(, $cuotas_a_cuentas_ids)) {
//                $sub_datos["pago_parcial"] = 'PAGO PARCIAL';
//            }

            $sub_datos["emitido"] = $pago->getFecha()->format("d/m/Y");
            $sub_datos["nro_cuota"] = $cuota->getNumeroDeCuota();
            $sub_datos["restan"] = $datos["cantidad_cuotas"] - ($cuota->getNumeroDeCuota() - $val);
            $sub_datos["efectivo"] = $pago->getMonto() - $pago->getInteresesNoCobrados();
            $sub_datos["descuento"] = $pago->getInteresesNoCobrados();

            $sub_datos["prox_vencimiento"] = "";
            $sub_datos["credito_cancelado"] = "";
            if ($cuota->getNumeroDeCuota() == $credito->getNroCuotas() && $sub_datos["pago_parcial"] != 'PAGO PARCIAL') {
                $sub_datos["credito_cancelado"] = "CREDITO CANCELADO";
            } else {
                if ($cuota->estoySaldada()) {
                    $sig_venc = $credito->obtenerCuotaPorNumero($cuota->getNumeroDeCuota() + 1)->getVencimientoOriginal();
                } else {
                    $sig_venc = $cuota->getVencimientoOriginal(); /* 13/05/2014 mod $cuota->getVencimiento(); */
                }
                $sub_datos["prox_vencimiento"] = $sig_venc->format("d/m/Y");
            }
            $datos["pagos"][] = $sub_datos;
        }

        /* Tito */

        foreach ($pagos_ids as $id) {
            $pagosRealizados[] = Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_Pago', $id);
        }

        $cuota = new Doctrine_Model_Entities_Cuota();

        $cuota = $cuotas_pagas[0];

        $this->view->datos = $datos;
        $this->view->usuario = $usuario;
        $this->view->credito = $credito;
        $this->view->cuotas_pagas = $cuotas_pagas;
        $this->view->cuota = $cuota;
        $this->view->pagosRealizados = $pagosRealizados;
        $this->view->nro_pago = count($cuota->getPagos()) . ' restan ' . count($credito->obtenerCuotasImpagas());
    }
    
    public function impresioncomprobantesAction() {

        $datos = $this->getRequest()->getParams();
        $this->view->credito_id = $datos['credito_id'];
        $this->view->cliente_id = $datos['cliente_id'];
        $this->view->cuotas_id = $datos['cuotas_id'];
        $this->view->pagos_ids = $datos['pagos_ids'];
        $this->view->cuotas_a_cuenta = $datos['cuotas_a_cuenta'];

        $ctas = explode(',', $datos['conjCuotasPagas']);
        $this->view->credito = $this->_creditoDao->obtenerPorId($datos['credito_id']);
        $this->view->pagos = $datos['pagos'];
        $this->view->apto_renovar = $datos['apto_renovar'];

        $this->view->noCobraIntereses = $datos['noCobraIntereses'];
        $this->view->interesesADescontar = $datos['interesesADescontar'];
        $this->view->cuotas_sin_intereses_ids = $datos['cuotas_sin_intereses_ids'];

        $conjCuotasPagas = array();
        foreach ($ctas as $ctaId) {
            $conjCuotasPagas[] = Doctrine_Model_Referencias::obtenerPorId("Doctrine_Model_Entities_Cuota", $ctaId);
        }
        $this->view->conjCuotasPagas = $conjCuotasPagas;
    }
    
    public function imprimirotorgacionAction() {
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();

        $usuario = new Doctrine_Model_Entities_Usuario();
        $usuario = $this->view->usuario;

        $credito_id = $this->getRequest()->getParam("credito_id");

        $credito = new Doctrine_Model_Entities_Credito();
        $credito = $this->_creditoDao->obtenerPorId($credito_id);
        $cant_cuotas_credito = $credito->getNroCuotas();

        // create PDF
        $pdf = new Zend_Pdf();
        //$page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
        //$image = Zend_Pdf_Image::imageWithPath('imagenes/logoBlanco.jpg');

        $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_COURIER_BOLD);

        $c = 0;
        $c = -20;
        $f = 280;

        $page = new Zend_Pdf_Page("641:298");

        /* Recibo credyphone */
        //$page->drawImage($image, $c + 50, $f - 60, $c + 230, $f - 10);
        $page->setFont($font, 18)
                ->drawText('CREDYPHONE', $c + 75, $f - 50);
        $page->setFont($font, 10)
                ->drawText('Sucursal: ', $c + 75, $f - 62)
                ->drawText(utf8_decode('Dirección: '), $c + 50, $f - 72)
                ->drawText('Tel: ', $c + 75, $f - 82)
                ->drawText("{$usuario->getSucursal()->getDescripcion()}", $c + 130, $f - 62)
                ->drawText(utf8_decode($usuario->getSucursal()->getDireccion()), $c + 115, $f - 72)
                ->drawText($usuario->getSucursal()->getTelefonos(), $c + 100, $f - 82);

        $f -= 10;
        $page->setFont($font, 15)
                ->setFillColor(Zend_Pdf_Color_Html::color('#990000'))
                /* ->drawText('OTORGACION', $c + 100, $f - 88) */
                ->setFont($font, 10)
                ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                ->drawText('N# Credito     : ', $c + 50, $f - 105)
                ->drawText('Apellidos      : ', $c + 50, $f - 120)
                ->drawText('Nombres        : ', $c + 50, $f - 135)
                ->drawText('Otorgado       : ', $c + 50, $f - 150)
                ->drawText('Cant. Cuotas   : ', $c + 50, $f - 165)
                ->drawText('Importe Cuota  : ', $c + 50, $f - 180)
                ->drawText('Importe Total  : ', $c + 50, $f - 195);
        $page->setFont($font, 11)
                ->drawText($credito->getId(), $c + 150, $f - 105)
                ->drawText("{$credito->getCliente()->getApellido()}", $c + 150, $f - 120)
                ->drawText("{$credito->getCliente()->getNombres()}", $c + 150, $f - 135)
                ->drawText("{$credito->getFecha()->format("d/m/Y")}", $c + 150, $f - 150)
                ->drawText($cant_cuotas_credito, $c + 150, $f - 165)
                ->drawText("$ {$credito->getCuotas()->first()->getMontoOriginal()}", $c + 150, $f - 180)
                ->drawText("$ {$credito->getMonto()}", $c + 150, $f - 195);

        $c = 0;
        $c = 60;
        $f += 10;
        /* Recibo cliente */
        //$page->drawImage($image, $c + 300, $f - 60, $c + 480, $f - 10);
        $page->setFont($font, 18)
                ->drawText('CREDYPHONE', $c + 325, $f - 50);
        $page->setFont($font, 10)
                ->drawText('Sucursal: ', $c + 325, $f - 62)
                ->drawText(utf8_decode('Dirección: '), $c + 300, $f - 72)
                ->drawText('Tel: ', $c + 330, $f - 82)
                ->drawText("{$usuario->getSucursal()->getDescripcion()}", $c + 385, $f - 62)
                ->drawText(utf8_decode($usuario->getSucursal()->getDireccion()), $c + 365, $f - 72)
                ->drawText($usuario->getSucursal()->getTelefonos(), $c + 355, $f - 82);

        $f -= 10;
        $page->setFont($font, 15)
                ->setFillColor(Zend_Pdf_Color_Html::color('#990000'))
                /* ->drawText('OTORGACION', $c + 350, $f - 88) */
                ->setFont($font, 10)
                ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                ->drawText('N# Credito     : ', $c + 300, $f - 105)
                ->drawText('Apellidos      : ', $c + 300, $f - 120)
                ->drawText('Nombres        : ', $c + 300, $f - 135)
                ->drawText('Otorgado       : ', $c + 300, $f - 150)
                ->drawText('Cant. Cuotas   : ', $c + 300, $f - 165)
                ->drawText('Importe Cuota  : ', $c + 300, $f - 180)
                ->drawText("Vencimiento 1er Cuota: {$credito->getCuotas()->first()->getVencimientoOriginal()->format("d/m/Y")}", $c + 315, $f - 215);
        $page->setFont($font, 11)
                ->drawText($credito->getId(), $c + 400, $f - 105)
                ->drawText("{$credito->getCliente()->getApellido()}", $c + 400, $f - 120)
                ->drawText("{$credito->getCliente()->getNombres()}", $c + 400, $f - 135)
                ->drawText("{$credito->getFecha()->format("d/m/Y")}", $c + 400, $f - 150)
                ->drawText("{$cant_cuotas_credito}", $c + 400, $f - 165)
                ->drawText("$ {$credito->getCuotas()->first()->getMontoOriginal()}", $c + 400, $f - 180);

        $pdf->pages[] = $page;

        $fecha = new DateTime();
        $filename = "otorgacion_{$credito->getId()}_{$fecha->format("Ymd")}";

        $this->getResponse()->setHeader('Content-type', 'application/pdf', true);
        $this->getResponse()->setHeader('Content-disposition', "inline; filename={$filename}.pdf", true);
        $this->getResponse()->setBody($pdf->render());
    }
    
    public function impresionotorgacionAction() {

        $this->_helper->_layout->setLayout('layout_pagos');
        $credito_id = $this->getRequest()->getParam("credito_id");
        $lpt1 = $this->getRequest()->getParam("lpt1", null);

        if (!empty($credito_id)) {
            $credito = $this->_creditoDao->obtenerPorId($credito_id);
            $this->view->credito = $credito;
            if ($lpt1) {
                $this->renderScript('credito/imprimirotorgacionlpt1.phtml');
            }
        }
    }
    
    public function imprimirAction() {
        $credito_id = $this->getRequest()->getParam("credito_id");

        if (!empty($credito_id)) {
            $credito = $this->_creditoDao->obtenerPorId($credito_id);
            $this->view->credito = $credito;
        }
    }
    
}

